package br.com.playonline.bussines;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.playonline.domain.Carrinho;
import br.com.playonline.domain.Endereco;
import br.com.playonline.domain.Pessoa;
import br.com.playonline.domain.Telefone;
import br.com.playonline.domain.Usuario;
import br.com.playonline.dto.UsuarioDTO;
import br.com.playonline.persistencia.CarrinhoHibernateDAO;
import br.com.playonline.persistencia.EnderecoHibernateDAO;
import br.com.playonline.persistencia.PessoaHibernateDAO;
import br.com.playonline.persistencia.TelefoneHibernateDAO;
import br.com.playonline.persistencia.UsuarioHibernateDAO;

@Component
public class UsuarioBU {

	@Autowired
	EnderecoHibernateDAO enderecoHibernateDAO;
	
	@Autowired
	PessoaHibernateDAO pessoaHibernateDAO;
	
	@Autowired
	TelefoneHibernateDAO telefoneHibernateDAO;
	
	@Autowired
	UsuarioHibernateDAO usuarioHibernateDAO;
	
	@Autowired
	CarrinhoHibernateDAO carrinhoHibernateDAO;
	
	@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
	public void save(UsuarioDTO usuarioDTO){
		
		Endereco endereco = new Endereco();
		endereco.setCep(usuarioDTO.getCep());
		endereco.setCidade(usuarioDTO.getCidade());
		endereco.setEstado(usuarioDTO.getEstado());
		this.enderecoHibernateDAO.save(endereco);
		
		Telefone telefone = new Telefone();
		telefone.setCelular(usuarioDTO.getCelular());
		telefone.setNomeContato(usuarioDTO.getNomeContato());
		telefone.setResidencial(usuarioDTO.getResidencial());
		telefone.setTelContato(usuarioDTO.getTelContato());
		this.telefoneHibernateDAO.save(telefone);
		
		Pessoa pessoa = new Pessoa();
		pessoa.setCpf(usuarioDTO.getCpf());
		pessoa.setDtNascimento(getDate(usuarioDTO.getDtNascimento()));
		pessoa.setNome(usuarioDTO.getNome());
		pessoa.setSexo(usuarioDTO.getSexo());
		pessoa.setEndereco(endereco);
		pessoa.setTelefone(telefone);
		this.pessoaHibernateDAO.save(pessoa);
		
		Carrinho carrinho = new Carrinho();
		this.carrinhoHibernateDAO.save(carrinho);
		
		Usuario usuario = new Usuario();
		usuario.setNewlester(true);
		usuario.setPapel("user");
		usuario.setSaldo(new Double(0.0));
		usuario.setSaldoEmJogo(new Double(0.0));
		usuario.setEmail(usuarioDTO.getEmail());
		usuario.setSenha(usuarioDTO.getSenha());
		usuario.setPessoa(pessoa);
		usuario.setCarrinho(carrinho);
		this.usuarioHibernateDAO.save(usuario);
		
		//ENVIAR EMAIL
		
	}
	
	private Date getDate(String data){
		DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		Date date = null;
		try {
			date = dateFormat.parse(data);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	
	public Usuario getUsuario(){
		return null;
	}
	
}
